package com.jiyun.alipay.controller;

import com.jiyun.alipay.service.PayService;
import com.jiyun.alipay.service.WxPayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/wx_pay")
public class WxPayController {
    @Autowired
    private WxPayService wxPayService;
    @Autowired
    private PayService payService;

    @PostMapping("/subWx")
    public String subWxOrder(String orderId) throws Exception {
        //1.从数据库查询(订单名称,订单编号,订单金额)
        String body = "支付乘车费用";    //订单名称(商品名称)
        String money = "1";         //订单金额(分)
        //3.调用微信工具类,把订单发给微信
        Map<String, String> payMap = wxPayService.createNative(body, orderId, money);
        if (payMap == null) {
            throw new RuntimeException("下单失败,请稍后重试!");
        }
        //4.判断下单是否正常
        String return_code = payMap.get("return_code");
        if (!return_code.equals("SUCCESS")) {
            //获取错误信息
            String return_msg = payMap.get("return_msg");
            throw new RuntimeException(return_msg);
        }
        //5.如果成功,则获取生成的支付Url
        String code_url = payMap.get("code_url");
        return code_url;
    }

    @RequestMapping("/checkWx")
    public String checkWxOrder(String orderId, Integer payWay) throws Exception {
        //1.根据订单号,去微信中,查询订单状态
        Map<String, String> checkMap = wxPayService.queryNative(orderId);
        //2.获取请求结果
        String return_code = checkMap.get("return_code");
        if (return_code.equals("SUCCESS")) {
            //3.获取订单状态
            String trade_state = checkMap.get("trade_state");
            if (trade_state.equals("SUCCESS")) {
                // 订单已经支付
                // 修改订单状态(修改数据库中的订单状态)
                payService.updateOrderStatus(orderId, payWay);
            } else if (trade_state.equals("PAYERROR")) {
                // 支付失败!
                // 修改订单状态(修改数据库中的订单状态);
            } else if (trade_state.equals("CLOSED")) {
                // 订单超时,已关闭!
                // 修改订单状态(修改数据库中的订单状态);
            } else if (trade_state.equals("NOTPAY")) {
                // 未支付!
            } else if (trade_state.equals("USERPAYING")) {
                // 支付中!
            } else if (trade_state.equals("REFUND")) {
                // 已取消
            }
            return trade_state;
        } else {
            // 获取请求失败原因
            String return_msg = checkMap.get("return_msg");
            throw new RuntimeException(return_msg);
        }
    }

    @RequestMapping("/closeWx")
    public String closeWxOrder(String orderId) throws Exception {
        //1.根据订单号,去微信中,关闭订单
        Map<String, String> map = wxPayService.closeNative(orderId);
        //2.获取请求结果
        String return_code = map.get("return_code");
        if (return_code.equals("SUCCESS")) {
            //3.获取关闭结果
            String result_code = map.get("result_code");
            if (result_code.equals("SUCCESS")) {
                // 关闭成功
                return "SUCCESS";
            } else {
                // 获取错误原因
                String err_code_des = map.get("err_code_des");
                throw new RuntimeException(err_code_des);
            }
        } else {
            //4. 获取请求失败原因
            String return_msg = map.get("return_msg");
            throw new RuntimeException(return_msg);
        }
    }
}
